package com.snpic.appaw.module.insure.service.vehicleInformation;

import java.util.*;

import com.snpic.appaw.module.insure.controller.app.orc.vo.VehicleLicenseRespVO;
import com.snpic.appaw.module.third.api.bjpt.dto.CarModelInfoInquiryReqTotalDto;
import com.snpic.appaw.module.third.api.bjpt.dto.CarModelInfoInquiryRespTotalDto;
import jakarta.validation.*;
import com.snpic.appaw.module.insure.controller.app.vehicleInformation.vo.*;
import com.snpic.appaw.module.insure.dal.dataobject.vehicleInformation.VehicleInformationDO;
import com.snpic.appaw.framework.common.pojo.PageResult;
import com.snpic.appaw.framework.common.pojo.PageParam;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.web.multipart.MultipartFile;

/**
 * 首页车辆卡片/编辑家庭档案 - 车辆信息 Service 接口
 *
 * @author jijun
 */
public interface VehicleInformationService {

	/**
	 * 首页车辆卡片/编辑家庭档案 - 创建车辆信息
	 * 	每位用户最多添加5辆车；当用户添加第6辆车时，阻断
	 *
	 * @param createReqVO 创建信息
	 * @return 编号
	 */
	Long createVehicleInformation(@Valid AppVehicleInformationSaveReqVO createReqVO);

	/**
	 * 首页车辆卡片/编辑家庭档案 - 更新车辆信息
	 * 返回OCR的结果,或者为空
	 * @param updateReqVO 更新信息
	 */
	VehicleLicenseRespVO updateVehicleInformation(MultipartFile vehicleLicenseFile, AppVehicleInformationSaveReqVO updateReqVO);

	/**
	 * 首页车辆卡片/编辑家庭档案 - 删除车辆信息
	 *
	 * @param id 编号
	 */
	void deleteVehicleInformation(Long id);

	/**
	 * 首页车辆卡片/编辑家庭档案 - 批量删除车辆信息
	 *
	 * @param ids 编号
	 */
	void deleteVehicleInformationListByIds(List<Long> ids);

	/**
	 * 获得首页车辆卡片/编辑家庭档案 - 车辆信息
	 *
	 * @param id 编号
	 * @return 首页车辆卡片/编辑家庭档案 - 车辆信息
	 */
	VehicleInformationDO getVehicleInformation(Long id);

	/**
	 * 获得首页车辆卡片/编辑家庭档案 - 车辆信息分页
	 *
	 * @param pageReqVO 分页查询
	 * @return 首页车辆卡片/编辑家庭档案 - 车辆信息分页
	 */
	PageResult<VehicleInformationDO> getVehicleInformationPage(AppVehicleInformationPageReqVO pageReqVO);

	/**
	 * 首页车辆卡片/编辑家庭档案 - 获取车险用省城车牌分级列表
	 *
	 * @return
	 */
	ReginsListRespVO getReginsList();

	/**
	 * 首页车辆卡片/编辑家庭档案 - 当前用户绑定的车辆信息列表
	 * @return
	 */
	List<VehicleInformationDO> getVehicleInformationList(AppVehicleInformationPageReqVO pageReqVO);

	/**
	 * 首页车辆卡片/编辑家庭档案 - 切换车辆的选中状态
	 * @param switchSelectStatusReqVO
	 * @return
	 */
	boolean switchSelectStatus(SwitchSelectStatusReqVO switchSelectStatusReqVO);

	/**
	 * 首页车辆卡片/编辑家庭档案 - 车辆车型查询接口,前端专用
	 * @param plateNo
	 * @param reqDTO
	 * @return
	 */
	CarModelInfoInquiryRespTotalDto carModelInfoInquiry(@NotEmpty(message = "车牌号不能为空") String plateNo, CarModelInfoInquiryReqTotalDto reqDTO);
}